package thread;

import java.util.concurrent.locks.ReentrantLock;

/**
 * @author TaoTaojs
 * @date 2021/2/24 下午11:20
 * <p>Description</p>
 * <h2>功能描述</h2>
 * 保证代码原子性，加锁
 * <h3>主要功能：</h3>
 * <ol>
 *     <li></li>
 * </ol>
 * <h3>关联类</h3>
 * <p>参考链接：</p>
 * <h2>更新日志</h2>
 * [author]        [time]                      [version]          [desc]
 * TaoTaojs        2021/2/24 下午11:20             V1.0
 */
@SuppressWarnings("ALL")
public class 原子性 {

    private volatile long count = 0;

    ReentrantLock lock = new ReentrantLock();

    private /*synchronized*/ void add10K() {
//        lock.lock();
        int idx = 0;
        while (idx++ < 10000) {
            count++;
        }
//        lock.unlock();
    }

    public static void main(String[] args) throws InterruptedException {
        原子性 test = new 原子性();
        // 创建两个线程，执行 add() 操作
        Thread th1 = new Thread(()->{
            test.add10K();
        });
        Thread th2 = new Thread(()->{
            test.add10K();
        });
        // 启动两个线程
        th1.start();
        th2.start();
        // 等待两个线程执行结束
        th1.join();
        th2.join();
        // 介于1w-2w,即使加了volatile也达不到2w
        System.out.println(test.count);
    }

}
